Skip to content

fix: cache project favicons across web and mobile - #4767

Merged
gabrielelpidio merged 7 commits into
mainfrom
t3code/cache-favicons-web-mobile
Jul 30, 2026
Merged

fix: cache project favicons across web and mobile#4767
gabrielelpidio merged 7 commits into
mainfrom
t3code/cache-favicons-web-mobile

Conversation

@gabrielelpidio

@gabrielelpidio gabrielelpidio commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • Added versioned project favicon asset URLs based on file modification time and size.
  • Added shared cache-key generation scoped to environment, workspace, and favicon revision.
  • Enabled persistent favicon caching on mobile and reused loaded favicon URLs on web.
  • Added coverage for stable URLs, cache identity, and favicon updates.

Why

Signed asset URLs change as tokens rotate, which caused browsers and mobile clients to reload unchanged project favicons. Versioning the asset by the favicon's file metadata provides a stable cache identity while still invalidating the cache when the favicon changes.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Medium Risk
Changes signed asset URL shape and expiry for project favicons plus client caching behavior; scope is limited to favicon assets and is covered by new tests, but incorrect hashing or cache logic could show stale or missing icons.

Overview
Signed project favicon URLs change whenever tokens rotate, which forced web and mobile to reload unchanged icons. This PR makes asset filenames content-addressed (SHA-256 hash in the path) and aligns favicon token expiry to 30-minute buckets, so the same file keeps a stable URL identity across re-issues.

Shared getProjectFaviconCacheKey ties cache identity to environment, workspace root, and the versioned filename—not the signed token.

Web keeps showing the last successfully loaded favicon while a new URL loads in a hidden <img>, and only drops to the folder icon when the displayed image errors.

Mobile adds a small request lifecycle cache so stale onLoad/onError from superseded URLs are ignored, and wires expo-image with cacheKey, recyclingKey, and memory-disk policy.

Tests cover bucketed expiry, hash-based filenames, cache-key stability, refresh/fallback behavior, and mobile supersession.

Reviewed by Cursor Bugbot for commit 0d0779c. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Cache project favicons by content-hash key across web and mobile

  • Adds getProjectFaviconCacheKey in packages/shared/src/projectFavicon.ts to derive a stable cache identity from environmentId, workspace root, and a versioned filename, independent of transient signed tokens.
  • Server-side favicon URLs now include a SHA-256 content-hash in the filename and use bucketed 30-minute expiry, so repeated calls return the same URL until file content changes.
  • Web's ProjectFaviconImage holds the previous image on screen while preloading a refreshed URL, only swapping on success and guarding error handlers by src match.
  • Mobile's ProjectFaviconImage replaces a local Set-based cache with coordinated per-cacheKey request tracking, ignoring load/error callbacks from superseded URLs.
  • Behavioral Change: favicon token expiry on the server is now aligned to 30-minute buckets rather than the general token TTL, which may extend the lifetime of issued URLs.

Macroscope summarized 0d0779c.

Summary by CodeRabbit

  • Bug Fixes
    • Improved project favicon caching with deterministic cache keys and smarter reuse, so refreshes can retain the last working favicon and only discard it when the matching request fails.
    • Updated server-issued project-favicon URL expiry and filename generation to be time-bucketed and content-hashed, producing stable signed fallback behavior.
  • Tests
    • Expanded server, web, shared, and mobile test coverage for cache-key identity, refresh/failure fallback behavior, request supersession/eviction, and bucketed expiry plus filename signing stability.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 28, 2026
Comment thread apps/web/src/components/ProjectFavicon.tsx
@macroscopeapp

macroscopeapp Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new content-based caching mechanism for project favicons across web and mobile, including SHA-256 versioning on the server, new cache key generation, and request lifecycle tracking. The scope of new logic and behavioral changes across multiple platforms warrants human review.

You can customize Macroscope's approvability policy. Learn more.

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Project favicon asset URLs now include content revisions, with shared cache-key derivation and updated web and mobile loading behavior. Web rendering preserves valid images across refresh failures, while mobile image caching uses project-specific keys.

Changes

Project favicon refresh flow

Layer / File(s) Summary
Versioned favicon asset issuance
apps/server/src/assets/AssetAccess.ts, apps/server/src/assets/AssetAccess.test.ts
Project favicon capabilities use bucketed expiration and SHA-256 content revisions; tests cover stable URLs, changed revisions, and expiry bucketing.
Shared favicon cache identity
packages/shared/src/projectFavicon.ts, packages/shared/src/projectFavicon.test.ts
A shared helper derives cache keys from environment, workspace, and the versioned URL filename, with coverage for matching and differing identities.
Web favicon loading and fallback
apps/web/src/components/ProjectFavicon.tsx, apps/web/src/components/ProjectFavicon.test.tsx
The component caches displayed sources by cache key, preloads refreshed URLs, invalidates failed entries, and preserves valid images through refresh errors.
Mobile request cache lifecycle
apps/mobile/src/components/projectFaviconCache.ts, apps/mobile/src/components/projectFaviconCache.test.ts
Mobile request objects track active URLs by cache key, ignore stale callbacks, restore remaining active revisions, and bound remembered entries.
Mobile image request integration
apps/mobile/src/components/ProjectFavicon.tsx
Mobile rendering derives cache identities, manages active requests, and passes cache and recycling metadata to expo-image.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant AssetAccess
  participant ProjectFavicon
  participant ProjectFaviconImage
  participant ImageLoader
  AssetAccess->>ProjectFavicon: return content-versioned favicon URL
  ProjectFavicon->>ProjectFaviconImage: provide cacheKey and favicon URL
  ProjectFaviconImage->>ImageLoader: begin active image request
  ImageLoader-->>ProjectFaviconImage: report load or failure
  ProjectFaviconImage->>ProjectFaviconImage: record or invalidate cache entry
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise and accurately summarizes the main change: cross-platform favicon caching.
Description check ✅ Passed The description includes the required What Changed, Why, and Checklist sections and is mostly complete.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch t3code/cache-favicons-web-mobile

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

- Version favicon asset URLs when the file changes
- Reuse stable project-scoped cache keys across signed URLs
- Configure mobile image caching and add coverage
@gabrielelpidio
gabrielelpidio force-pushed the t3code/cache-favicons-web-mobile branch from 417da35 to f77304e Compare July 30, 2026 06:37
@gabrielelpidio

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Comment thread apps/mobile/src/components/ProjectFavicon.tsx Outdated
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
packages/shared/src/projectFavicon.ts (1)

7-7: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Prefer the inferred return type.

The return annotation is redundant here.

Proposed change
-): string {
+) {

As per coding guidelines, “Prefer inferred types over explicit annotations and do not use any.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/shared/src/projectFavicon.ts` at line 7, Remove the explicit string
return annotation from the function in projectFavicon.ts and let TypeScript
infer its return type, while leaving the function implementation unchanged.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/server/src/assets/AssetAccess.test.ts`:
- Around line 223-228: Update the test around issueAssetUrl to provide the
repository’s controllable Clock test layer and freeze the timestamp before both
project-favicon URL calls. Ensure both invocations run under the same fixed
clock value so the existing equality assertion remains deterministic.

In `@apps/server/src/assets/AssetAccess.ts`:
- Around line 344-346: Update the favicon revision construction in
AssetAccess.ts around modifiedAt/revision to use a content digest or durable
content version, ensuring every content change—including equal-size
updates—produces a new filename. In AssetAccess.test.ts lines 238-244, add a
controlled equal-size content replacement and assert that the generated revision
filename changes.

---

Nitpick comments:
In `@packages/shared/src/projectFavicon.ts`:
- Line 7: Remove the explicit string return annotation from the function in
projectFavicon.ts and let TypeScript infer its return type, while leaving the
function implementation unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e38efc06-abce-43f3-bbf0-a91f691d3cae

📥 Commits

Reviewing files that changed from the base of the PR and between 6efcf3e and f77304e.

📒 Files selected for processing (7)
  • apps/mobile/src/components/ProjectFavicon.tsx
  • apps/server/src/assets/AssetAccess.test.ts
  • apps/server/src/assets/AssetAccess.ts
  • apps/web/src/components/ProjectFavicon.test.tsx
  • apps/web/src/components/ProjectFavicon.tsx
  • packages/shared/src/projectFavicon.test.ts
  • packages/shared/src/projectFavicon.ts

Comment thread apps/server/src/assets/AssetAccess.test.ts Outdated
Comment thread apps/server/src/assets/AssetAccess.ts Outdated
@gabrielelpidio

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
apps/server/src/assets/AssetAccess.ts (1)

173-173: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Narrow the Crypto service dependency to favicon issuance.

Line 173 resolves Crypto.Crypto before the resource switch, so workspace-file and attachment URL issuance now requires a Crypto layer even though those branches never hash bytes. Move the lookup into the project-favicon branch, after confirming a canonical favicon exists.

Proposed adjustment
-  const crypto = yield* Crypto.Crypto;
...
      if (relativePath && canonicalFaviconPath) {
+        const crypto = yield* Crypto.Crypto;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/server/src/assets/AssetAccess.ts` at line 173, Move the Crypto.Crypto
service lookup from the shared resource-issuance setup into the project-favicon
branch in AssetAccess, resolving it only after confirming a canonical favicon
exists. Keep workspace-file and attachment URL issuance independent of the
Crypto service.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/mobile/src/components/ProjectFavicon.tsx`:
- Around line 104-107: Update the ProjectFavicon error handling around the image
URL/request generation so onError deletes the shared loadedFaviconKeys entry
only when the failed request still matches the current generation; ignore stale
errors after a newer revision has loaded. Add a regression test covering a stale
error arriving after the same revision succeeds and verify it does not evict the
shared key or trigger fallback/reload flicker.

---

Nitpick comments:
In `@apps/server/src/assets/AssetAccess.ts`:
- Line 173: Move the Crypto.Crypto service lookup from the shared
resource-issuance setup into the project-favicon branch in AssetAccess,
resolving it only after confirming a canonical favicon exists. Keep
workspace-file and attachment URL issuance independent of the Crypto service.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d67bccd0-2fd2-470f-849f-a8baa9c88d9b

📥 Commits

Reviewing files that changed from the base of the PR and between f77304e and 275cf65.

📒 Files selected for processing (4)
  • apps/mobile/src/components/ProjectFavicon.tsx
  • apps/server/src/assets/AssetAccess.test.ts
  • apps/server/src/assets/AssetAccess.ts
  • packages/shared/src/projectFavicon.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/shared/src/projectFavicon.ts

Comment thread apps/mobile/src/components/ProjectFavicon.tsx
@gabrielelpidio

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Comment thread apps/mobile/src/components/projectFaviconCache.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/server/src/assets/AssetAccess.ts (1)

177-181: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Compute the favicon expiry after the hashing work.

The expiry is bucketed from the clock before path resolution, file I/O, SHA-256 hashing, secret loading, and signing. A request started in the final milliseconds of a bucket can therefore return an already-expired token. Recompute the bucket from a fresh clock reading immediately before building/signing the claims, and add a bucket-boundary regression test.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/server/src/assets/AssetAccess.ts` around lines 177 - 181, Move the
project-favicon expiresAt calculation out of the initial timestamp section and
recompute it from a fresh clock reading immediately before constructing and
signing the claims, after path resolution, I/O, hashing, and secret loading
complete. Preserve the existing non-favicon TTL behavior, and add a regression
test covering a request that crosses a favicon token-bucket boundary.
♻️ Duplicate comments (1)
apps/mobile/src/components/ProjectFavicon.tsx (1)

104-110: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Ignore callbacks from superseded favicon requests.

key={props.faviconUrl} remounts the native image, but an old native callback may still arrive after the URL changes. If that old request errors before the refreshed URL loads, markProjectFaviconFailed evicts the still-valid entry and this component shows the fallback. A late old onLoad can also overwrite the recorded URL. Track the latest requested URL/generation and guard both callbacks; add a regression covering an old callback arriving before the new URL loads.

Proposed guard
+  const latestFaviconUrl = useRef(props.faviconUrl);
+  latestFaviconUrl.current = props.faviconUrl;
+
           onLoad={() => {
+            if (latestFaviconUrl.current !== props.faviconUrl) return;
             markProjectFaviconLoaded(props.cacheKey, props.faviconUrl);
             setStatus("loaded");
           }}
           onError={() => {
+            if (latestFaviconUrl.current !== props.faviconUrl) return;
             if (!markProjectFaviconFailed(props.cacheKey, props.faviconUrl)) return;
             setStatus("error");
           }}

Import useRef and add a component-level regression test.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/mobile/src/components/ProjectFavicon.tsx` around lines 104 - 110, Update
ProjectFavicon’s load and error callbacks to track the latest requested favicon
URL or request generation via useRef, and ignore callbacks from superseded
native image requests before mutating cache state or component status. Ensure
only callbacks for the current props.faviconUrl can call
markProjectFaviconLoaded, markProjectFaviconFailed, or setStatus, and add a
regression test covering an old callback arriving before the new URL loads.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@apps/server/src/assets/AssetAccess.ts`:
- Around line 177-181: Move the project-favicon expiresAt calculation out of the
initial timestamp section and recompute it from a fresh clock reading
immediately before constructing and signing the claims, after path resolution,
I/O, hashing, and secret loading complete. Preserve the existing non-favicon TTL
behavior, and add a regression test covering a request that crosses a favicon
token-bucket boundary.

---

Duplicate comments:
In `@apps/mobile/src/components/ProjectFavicon.tsx`:
- Around line 104-110: Update ProjectFavicon’s load and error callbacks to track
the latest requested favicon URL or request generation via useRef, and ignore
callbacks from superseded native image requests before mutating cache state or
component status. Ensure only callbacks for the current props.faviconUrl can
call markProjectFaviconLoaded, markProjectFaviconFailed, or setStatus, and add a
regression test covering an old callback arriving before the new URL loads.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 1d0b1fa4-5e10-4096-aaae-1092add5aef9

📥 Commits

Reviewing files that changed from the base of the PR and between 275cf65 and fb71493.

📒 Files selected for processing (4)
  • apps/mobile/src/components/ProjectFavicon.tsx
  • apps/mobile/src/components/projectFaviconCache.test.ts
  • apps/mobile/src/components/projectFaviconCache.ts
  • apps/server/src/assets/AssetAccess.ts

@gabrielelpidio

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Comment thread apps/mobile/src/components/ProjectFavicon.tsx Outdated
@gabrielelpidio

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6ada303. Configure here.

Comment thread apps/mobile/src/components/ProjectFavicon.tsx

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/mobile/src/components/projectFaviconCache.ts`:
- Around line 6-7: Bound the module-level bookkeeping in currentFaviconUrls and
loadedFaviconKeys so favicon revision updates do not accumulate indefinitely.
Evict superseded revision entries only when they are no longer active or needed
by concurrent requests, preserving in-flight request tracking and current
favicon behavior.
- Around line 13-17: Update beginProjectFaviconRequest and the corresponding
onLoad/onError stale-callback handling so URL-bearing requests cannot bypass
validation when cacheKey is null. Prefer enforcing a non-null cacheKey for
requests with faviconUrl; otherwise add per-request URL/session tracking for
uncached images, and add a regression test covering a null-key A→B remount where
the stale A callback cannot update B’s status.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c81f8034-3eb9-41ed-a49b-06c1c4655b4b

📥 Commits

Reviewing files that changed from the base of the PR and between 6ca94bf and 6ada303.

📒 Files selected for processing (3)
  • apps/mobile/src/components/ProjectFavicon.tsx
  • apps/mobile/src/components/projectFaviconCache.test.ts
  • apps/mobile/src/components/projectFaviconCache.ts

Comment thread apps/mobile/src/components/projectFaviconCache.ts Outdated
Comment thread apps/mobile/src/components/projectFaviconCache.ts
@gabrielelpidio

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@gabrielelpidio

Copy link
Copy Markdown
Contributor Author

@coderabbitai resume

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Reviews resumed.

@gabrielelpidio
gabrielelpidio merged commit 1d77cec into main Jul 30, 2026
17 checks passed
@gabrielelpidio
gabrielelpidio deleted the t3code/cache-favicons-web-mobile branch July 30, 2026 18:13
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Jul 30, 2026
## What's Changed
* fix(mobile): support pre-Liquid-Glass iOS bottom toolbar by @gabrielelpidio in pingdotgg/t3code#4984
* fix(server): restore PR detection without HOME by @StiensWout in pingdotgg/t3code#4985
* fix(web): fill fast mode icon by @maria-rcks in pingdotgg/t3code#5004
* fix: cache project favicons across web and mobile by @gabrielelpidio in pingdotgg/t3code#4767
* perf(ci): cut stale runs and redundant setup by @t3dotgg in pingdotgg/t3code#4802


**Full Changelog**: pingdotgg/t3code@v0.0.32-nightly.20260730.957...v0.0.32-nightly.20260730.958

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.32-nightly.20260730.958
PauloDaniel1993 added a commit to PauloDaniel1993/t3code that referenced this pull request Jul 31, 2026
Brings in 30 upstream commits since abc409c, including the libghostty-vt
web terminal (pingdotgg#4860), `npx t3 pair` (pingdotgg#4955), project favicon caching (pingdotgg#4767),
and forward-compatible config union decoding (pingdotgg#5055).

Three files needed manual resolution; the rest auto-merged.

- modelOptions.test.ts / AssetAccess.test.ts: both sides added tests and
  imports at the same spot, so both sides are kept.
- ThreadTerminalDrawer: upstream replaced xterm.js with the libghostty-vt
  surface, so the fork's terminal typography feature was reimplemented on
  the new API. Font family and size now flow through GhosttyTerminalSurface
  `font` options and `setFont`, which owns loading, cell remeasurement,
  refit, and re-render, replacing the manual FitAddon dance.

The appearance default font stack ends in `monospace`, which would swallow
the Nerd Font glyph fallbacks the renderer appends to any face it is given,
so the default now defers to the renderer's own stack and only a genuinely
custom face is forwarded.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 1, 2026
* Fix incorrect pluralization of “entry” (pingdotgg#3933)

* feat(server): title background-task work-log rows with the task name (pingdotgg#3751)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: delegate OpenCode session titles to provider (pingdotgg#3720)

* Archive selected threads from the context menu (pingdotgg#3895)

* fix(cli): support force removing projects (pingdotgg#3922)

* fix: allow sidebar to be shrunk when wider than viewport (pingdotgg#2456)

Co-authored-by: Shoaib Ansari <shoaibansari@Shoaibs-Mac-mini.local>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(codex): show web search query and url in tool call details (pingdotgg#2093)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Add Codex launch arguments setting (pingdotgg#2892)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: root <root@localhost.localdomain>

* [orchestration] Clear stale active turn when session becomes inactive (pingdotgg#3159)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Regenerate Codex reset credit protocol bindings (pingdotgg#4173)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(preview): preserve direct localhost navigation (pingdotgg#3939)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* Synchronize mobile threads with authoritative shell snapshots (pingdotgg#4163)

Co-authored-by: codex <codex@users.noreply.github.com>

* Gate iOS glass layout on native support (pingdotgg#4032)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(opencode): resume the OpenCode session on follow-ups instead of starting an empty one (pingdotgg#3617)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(server): use CLI for OpenCode health check instead of spawning server (pingdotgg#4153)

* fix(web): scope timeline minimap hover target to the side gutter (pingdotgg#3869)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* [codex] show complete approval details (pingdotgg#4111)

* fix(web): paint text selection over composer chips (pingdotgg#4139)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

* [codex] preserve custom model slugs (pingdotgg#4168)

* fix(web): preview workspace images in the file panel (pingdotgg#3996)

Co-authored-by: Rhiz3K <rhiz3k@protonmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(web): drag files from the explorer into the chat composer (pingdotgg#4140)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

* fix(desktop): preserve main window bounds (pingdotgg#3851)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* perf(orchestration): speed up new-chat propagation and offline catch-up (pingdotgg#4177)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Finale: upgrade changed files card to fix various UI issues (pingdotgg#4113)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Pass CLI OAuth config to hosted web deploy (pingdotgg#4186)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): always show environment chip for remote projects (pingdotgg#4217)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep composer editable while disconnected (pingdotgg#4241)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: better defaults — Claude 1M context, Codex gpt-5.6, worktrees from origin main (pingdotgg#4240)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(claude): handle all SDK stream messages; stop spurious work-log warning rows (pingdotgg#4244)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Sidebar v2 beta: flat thread list with a server-backed settled lifecycle (pingdotgg#4026)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>

* fix(settings): validate the add-provider wizard step before advancing (pingdotgg#2813) (pingdotgg#3100)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(claude): isolate capability probe from user MCP servers (pingdotgg#4015)

Co-authored-by: codex <codex@users.noreply.github.com>

* Preserve connecting status while a turn starts (pingdotgg#4101)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(server): stop restoring stale OpenCode models (pingdotgg#4095)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] keep scoped package references as text (pingdotgg#4167)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): default provider selection for users without Codex (pingdotgg#4117)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* Unify temporary worktree branch naming (pingdotgg#4278)

* fix(web): use message-square icon for settled icon-less project threads in sidebar v2 (pingdotgg#4279)

* Stabilize sidebar settling animations (pingdotgg#4280)

* Restore Copy Link in chat link context menu (pingdotgg#4161)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(desktop): handle EPIPE errors on stdout/stderr to prevent crash dialog (pingdotgg#4213)

* Preserve draft thread highlighting during promotion (pingdotgg#4283)

Co-authored-by: codex <codex@users.noreply.github.com>

* Move mobile working timer into the thread timeline (pingdotgg#4285)

* Stabilize PR status lookups and provider session lifecycle (pingdotgg#4281)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: open command palette instead of custom dialog for new thread picker in SidebarV2 (pingdotgg#4269)

* fix(server): don't drop sticky PR fallback when remote URL can't be resolved (pingdotgg#4289)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): copy branch name via right-click in the branch selector (pingdotgg#4275)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add remote server updates and standalone service management (pingdotgg#4286)

Co-authored-by: codex <codex@users.noreply.github.com>

* Refine light-mode sidebar surfaces (pingdotgg#4268)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): don't mark Android VPN/Tailscale as offline when connected (pingdotgg#3949)

* improve and prevent silent thread branch drift and PR fetching (pingdotgg#2284)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* feat(web): refresh application surfaces

* style(web): polish dark mode dialogs

* fix(web): unify and tune glass surfaces

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): apply glass opacity to thread tooltip

* fix(web): override thread tooltip background

* fix(web): apply glass opacity to model picker

* style(web): polish glass opacity slider

* fix(web): apply glass opacity to command palette

* fix(web): add glass composer alerts

* fix(web): honor composer glass opacity

* test(web): stabilize timeline module setup

* style(web): fade settings content beneath navbar

* test(desktop): include glass opacity in settings fixture

* fix(web): address redesign review findings

* fix(web): sync provider banner dismissal

* fix(web): new-thread defaults ignored for remote environments (pingdotgg#4276)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: add "Auto" runtime mode — AI-reviewed approvals for Codex and Claude (pingdotgg#4272)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add shared t3.json project configuration support (pingdotgg#4317)

* Restore light-mode surfaces and refine dialog styling

- Restore light-mode glass, dialog, dropdown, and composer colors
- Refine provider wizard, changed-file cards, sidebar controls, and buttons
- Update wizard step tests for the new list structure

* Unify dialog glass and fix composer overlays (pingdotgg#4365)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): warn before silent Windows updates (pingdotgg#4350)

* [codex] Move project grouping to General settings (pingdotgg#4313)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Group project scopes in mobile thread lists (pingdotgg#4314)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Move mobile project grouping to General settings (pingdotgg#4315)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Deduplicate connection failure messaging (pingdotgg#4367)

Co-authored-by: codex <codex@users.noreply.github.com>

* Restore grouped project filtering in Sidebar V2 (pingdotgg#4282)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] restore Sidebar V2 project actions (pingdotgg#4373)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Group projects in new-thread pickers (pingdotgg#4312)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): restore dark composer toolbar styling

* Fix thread tooltip folder icon color (pingdotgg#4383)

* fix(server): parse CLI version in update preflight (pingdotgg#4389)

* fix(web): sidebar v2 polish — jump hints, working duration, in-flight fade, settled sort (pingdotgg#4274)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix logical project grouping labels on mobile (pingdotgg#4391)

Co-authored-by: codex <codex@users.noreply.github.com>

* Add preview color scheme controls and simplify project grouping (pingdotgg#4385)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(cli): publish nightly branded favicons (pingdotgg#4372)

* Fix thread loading flash (pingdotgg#4396)

* fix(client-runtime): keep a warm thread un-settled despite a merged/closed PR (pingdotgg#4309)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix composer context strip alignment and glass shell (pingdotgg#4404)

* Polish iOS git progress overlay with glass effects (pingdotgg#4387)

* Improve composer glass fallbacks (pingdotgg#4406)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(web): collapse large git diffs by default to make chat more readable (pingdotgg#4409)

* Stop new threads inheriting checkout/branch from viewed thread (pingdotgg#4411)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: tone down branch-mismatch banner (pingdotgg#4416)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: Claude Code skills discoverable for the composer $ picker (pingdotgg#4414)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep settled threads reachable when opened directly (pingdotgg#4413)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(sidebar-v2): thread snoozing (pingdotgg#4311)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: maria <maria@kuuro.net>

* Upgrade Clerk packages and Expo integration (pingdotgg#4440)

* Increase light-mode contrast for user message bubbles (pingdotgg#4441)

* Restore model picker layout and retain iterative test state (pingdotgg#4450)

Co-authored-by: codex <codex@users.noreply.github.com>

* Color settled PR labels on hover (pingdotgg#4451)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Fix glass hover compositing artifacts (pingdotgg#4446)

Co-authored-by: codex <codex@users.noreply.github.com>

* Add Claude Opus 5 model (pingdotgg#4472)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>

* feat(web): add collapse-all toggle to diff panel (pingdotgg#4475)

* feat(web): show fast mode as a bolt instead of a "Normal" label (pingdotgg#4488)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(dev): keep worktree dev state isolated on T3 Code dev servers (pingdotgg#4555)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(dev): Make t3 code dev instances shareable over Tailscale (pingdotgg#4556)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(dev): skip browser-blocked ports (pingdotgg#4608)

* fix: cut websocket throughput in half by pruning activity payloads (pingdotgg#4622)

* perf(mobile): defer work-log detail serialization (pingdotgg#4607)

* test: account for lazy thread feed details (pingdotgg#4628)

* feat(relay): limit managed tunnels per user (pingdotgg#4530)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add managed tunnel limits migration (pingdotgg#4635)

* Add background preview capture and picture-in-picture support (pingdotgg#4397)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(web): prompt stash — cmd+S saves the composer to a per-provider queue (pingdotgg#4453)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Upgrade Effect and Alchemy betas (pingdotgg#4643)

Prepare Relay production infrastructure for the PlanetScale PS_20 HA topology, upgrade Effect and Alchemy to compatible betas, reconcile migration state, and preserve patched MCP session termination behavior.\n\nCo-authored-by: codex <codex@users.noreply.github.com>

* feat: allow new thread creation through project breadcrumbs (pingdotgg#4638)

* fix(web): scope PR state to the thread branch (pingdotgg#4460)

Co-authored-by: codex <codex@users.noreply.github.com>

* Drop redundant Relay user indexes (pingdotgg#4648)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(connect): release the Cloudflare tunnel when the environment shuts down (pingdotgg#4531)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix Relay Worker RuntimeContext wiring (pingdotgg#4653)

Co-authored-by: codex <codex@users.noreply.github.com>

* Fix live sidebar resize limits and defer Alchemy runtime context (pingdotgg#4655)

* fix(web): constrain branch toolbar context (pingdotgg#4657)

* Keep MCP credentials alive across provider turns (pingdotgg#4659)

* fix: close actions dropdown when editing (pingdotgg#4660)

* fix(preview): stabilize PiP viewport identity (pingdotgg#4661)

Co-authored-by: codex <codex@users.noreply.github.com>

* Add glass styling for thread tooltips and simplify preview tab handling (pingdotgg#4665)

* Use tarball archiving for hosted web deploys (pingdotgg#4669)

* fix(server): bound editor discovery during config loading (pingdotgg#4291)

* Prevent draft thread detail polling before shell registration (pingdotgg#4670)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat: add configurable source control writing settings (pingdotgg#4204)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* feat(diff-panel): show total line additions and deletions (pingdotgg#4674)

* Clear provider update actions while updating (pingdotgg#4676)

* Fix sidebar highlighting for draft threads (pingdotgg#4679)

* Use glass surfaces for web toasts (pingdotgg#4681)

* Show origin ref in branch trigger label (pingdotgg#4680)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): match react version to react-native 0.85.3 vendored renderer (19.2.3) (pingdotgg#4675)

* chore(release): prepare v0.0.29

* Add OTA update checks to mobile settings (pingdotgg#4686)

* fix(mobile): threads load snapped to bottom on iOS (pingdotgg#4689)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: default sidebar v2 on for nightly and dev builds (pingdotgg#4491)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): 33 web UI fixes (pingdotgg#4700)

* Make mobile Thread List v2 the default (pingdotgg#4717)

* Fix mobile showcase workflow without Clerk (pingdotgg#4718)

* Fix relay credential lookup for unlinked environments (pingdotgg#4692)

Co-authored-by: codex <codex@users.noreply.github.com>

* Settle merged PR threads immediately (pingdotgg#4704)

* feat(web): add maria's sidebar header artwork toggle (pingdotgg#4652)

* feat(web): add appearance settings category (pingdotgg#4715)

* fix(desktop): allow updater-controlled relaunch (pingdotgg#4721)

* fix(web): prevent diff panel scroll jumping (pingdotgg#4724)

* Link inline code file paths in chat markdown (pingdotgg#4726)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix Android showcase capture and rebuild v2 queued rows (pingdotgg#4730)

Co-authored-by: Claude <noreply@anthropic.com>

* perf(server): negotiate permessage-deflate on the websocket (pingdotgg#4705)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* docs: overhaul agent guidance (pingdotgg#4782)

* Prevent sidebar row labels from truncating (pingdotgg#4789)

* perf(server): gzip large thread snapshots (pingdotgg#4788)

* fix(web): stashed prompts now survive switching providers (pingdotgg#4787)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix Git ref refresh resource storms (pingdotgg#4727)

Co-authored-by: codex <codex@users.noreply.github.com>

* perf(server): trim stale context-window rows and drop dead replay RPC (pingdotgg#4791)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): defer command palette filesystem navigation (pingdotgg#2109)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(release): skip scripts during Vercel installs (pingdotgg#4796)

* refactor(client): share filesystem browse navigation (pingdotgg#4797)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): defer filesystem navigation (pingdotgg#4799)

Co-authored-by: codex <codex@users.noreply.github.com>

* refactor(server): use native HTTP compression streams (pingdotgg#4798)

Co-authored-by: codex <codex@users.noreply.github.com>

* Remove Connect waitlist and add GA announcement tooling (pingdotgg#4691)

* Fix Connect sign-in settings label (pingdotgg#4806)

* chore(release): prepare v0.0.30

* fix(desktop): restore T3 Connect sign-in (pingdotgg#4809)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Simplify files panel header (pingdotgg#4828)

* build(desktop): reduce installed app size by ~300MB (pingdotgg#4824)

* Update model version from claude-opus-4-8 to claude-opus-5 (pingdotgg#4832)

* Preserve the thread shell while detail loads (pingdotgg#4830)

* Reduce idle work and disk churn with native resource diagnostics (pingdotgg#2679)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(server): detect repositories after initialization (pingdotgg#4848)

* perf(server): merge separate staged/unstaged numstat calls into single diff HEAD --numstat (pingdotgg#4843)

* fix(git): disable external diff for review diff previews (pingdotgg#4854)

* Fix editable file focus and live syntax highlighting (pingdotgg#3979)

* fix(web): remember the rendered-markdown choice across threads (pingdotgg#4853)

Co-authored-by: Simon Doba <simon.doba@orbit.de>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* chore(release): prepare v0.0.31

* fix(mobile): reduce thread feed scroll jank (pingdotgg#4874)

* fix(web): restore sidebar v2 thread actions and terminal icon (pingdotgg#4712)

* fix(web): settle button now works on hover, not just right-click (pingdotgg#4905)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(clients): disable add project while disconnected (pingdotgg#4834)

* fix(composer): hide default Codex service tier (pingdotgg#4784)

* docs: link iOS and Android app store downloads (pingdotgg#4902)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): align remote server update action (pingdotgg#4731)

* fix(connect): suggest a serve command that matches how you ran connect (pingdotgg#4897)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): stop shared content errors in Personal Team builds (pingdotgg#4943)

* perf(mobile): sends respond instantly, thread opens stop freezing (pingdotgg#4882)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): show Codex fast mode as a bolt (pingdotgg#4947)

* docs: seed worktrees with a copy of real userdata instead of banning it (pingdotgg#4949)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): support dragged images in the composer (pingdotgg#4953)

* fix(mobile): stop long iOS threads from jumping while scrolling up (pingdotgg#4867)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep worktree default when switching a draft's machine (pingdotgg#4964)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(mobile): reconnect environments immediately on resume (pingdotgg#4878)

* feat(web): pasting a huge screenshot now compresses it instead of erroring (pingdotgg#4967)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): regenerate thread titles from sidebar (pingdotgg#4810)

* fix(web): show server update progress through reconnect (pingdotgg#4903)

* feat(search): find threads by conversation content (pingdotgg#4959)

* fix: marketing site Vercel builds no longer die after ~100 deploys (pingdotgg#4975)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* docs: split user and maintainer docs, fix 100+ stale claims (pingdotgg#4807)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): server updates no longer look like warnings (pingdotgg#4992)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(connect): reboots no longer strand the relay link, 403s now say why (pingdotgg#4988)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add project file picker (⌘P) and project content search (⇧⌘F) (pingdotgg#4855)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Check for mobile app updates on launch (pingdotgg#4958)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (pingdotgg#4984)

* fix(server): restore PR detection without HOME (pingdotgg#4985)

* fix(web): fill fast mode icon (pingdotgg#5004)

* fix: cache project favicons across web and mobile (pingdotgg#4767)

* perf(ci): cut stale runs and redundant setup (pingdotgg#4802)

* chore(mobile): bump app version to 1.0.1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* style(web): make scroll-to-end pill translucent (pingdotgg#5036)

* fix(ci): drop sparse-checkout from EAS workflows

actions/checkout implements sparse-checkout with --filter=blob:none, so
the runner repo is a partial clone missing the .repos/ blobs. eas-cli
archives the project via `git clone --depth 1 file://<workspace>`,
which upload-pack cannot serve from a partial clone and exits 128
(pingdotgg#4802 broke both EAS build workflows this way).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux (pingdotgg#5015)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(server): cache default branch name and origin existence across status refreshes (pingdotgg#5008)

* feat(shared): support shorthand (major-only) versions in the semver helpers (pingdotgg#5027)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): remove unnecessary photo library permission (pingdotgg#4929)

* fix(shared): lenient JSON parser deletes commas inside string values (pingdotgg#5025)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): default bare IP pairing to HTTP (pingdotgg#4990)

* fix(mobile): restore iOS Threads branding (pingdotgg#4862)

* chore: add mobile issue template area (pingdotgg#4895)

* fix(desktop): link release notes from the update downloaded toast (pingdotgg#4771)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(mobile): accept Android clipboard images in composer (pingdotgg#4836)

* fix(mobile): show the correct build channel in Android's Threads page header (pingdotgg#4861)

* fix(contracts): decode growing config unions forward-compatibly (pingdotgg#5055)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): server model, worktree, and origin preferences now apply to new tasks (pingdotgg#5064)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ci): repair the mobile showcase screenshots workflow (pingdotgg#5057)

* fix(ci): capture iPad App Store screenshots in landscape (pingdotgg#5065)

* fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout (pingdotgg#5066)

* feat(cli): `npx t3 pair` - generate QR code from a running server (pingdotgg#4955)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): self-update no longer rolls itself back on restart (pingdotgg#5095)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ci): rotate iPad showcase captures without Simulator UI scripting (pingdotgg#5094)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): render terminals with libghostty-vt (pingdotgg#4860)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* refactor: move the canonical libghostty-vt vendor to the repository root (pingdotgg#5102)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(mobile): add thread snoozing (pingdotgg#5053)

* feat(mobile): make settled threads collapsible (pingdotgg#5056)

* follow-up normalization after pingdotgg#4700. (pingdotgg#4498)

Co-authored-by: T3 Code Test <t3code-test@example.com>

* feat(web): search threads from the sidebar (pingdotgg#4769)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(release): prepare Command Center desktop v1

* fix(ci): allow public release publisher identity

* fix(web): avoid Windows preview path collision

* test(release): reject Windows module path collisions

* fix(release): bundle command center core

* fix: audit preserved upstream history safely

* feat(providers): add Kimi, subagents, and usage analytics

* fix(ci): repair reconnects and PNG safety scanning

* test(desktop): update Clerk environment fixture

* fix(ci): align provider and server integration contracts

* perf(web): skip impossible image encodings

---------

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: mel <mcmelon@nodiumhosting.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Tristan Knight <tris203@gmail.com>
Co-authored-by: Christoph Herzog <a.github@omega-id.com>
Co-authored-by: Andrew Barnes <bortstheboat@gmail.com>
Co-authored-by: Shoaib <shoaib050326@gmail.com>
Co-authored-by: Shoaib Ansari <shoaibansari@Shoaibs-Mac-mini.local>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com>
Co-authored-by: James <105842516+jamesx0416@users.noreply.github.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: root <root@localhost.localdomain>
Co-authored-by: Andrew Forster <76947376+Andrew-Forster@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Chris Michael Guzman <67719167+Chrrxs@users.noreply.github.com>
Co-authored-by: Vadym Kotai <vdmkotai@gmail.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: xxashxx-svg <xxanshxx9@gmail.com>
Co-authored-by: Maxwell Young <maxtheyoung@gmail.com>
Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Rhiz3K <33246262+Rhiz3K@users.noreply.github.com>
Co-authored-by: Rhiz3K <rhiz3k@protonmail.com>
Co-authored-by: Anirudh Coontoor <me@anirudhs.net>
Co-authored-by: Rusiru Sadathana <rusirusadathana@gmail.com>
Co-authored-by: ss <69873514+sandersonstabo@users.noreply.github.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Leonel Rivas <encriptandost@gmail.com>
Co-authored-by: Jaret Bottoms <jaretbottoms@gmail.com>
Co-authored-by: Ishan <ishansachu1@gmail.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: Miklós Fazekas <mfazekas@szemafor.com>
Co-authored-by: Henry Zhang <113233555+caezium@users.noreply.github.com>
Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com>
Co-authored-by: legs <145564979+justsomelegs@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: tomlit <tomlit@gmail.com>
Co-authored-by: jan <hi@4bs3nt.com>
Co-authored-by: Alex Southwell <saphid@gmail.com>
Co-authored-by: Max Katz <me@maxkatz.me>
Co-authored-by: Krzysztof Moch <krzysmoch.programs@gmail.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: wukko <me@wukko.me>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: ohbentos <72638975+ohbentos@users.noreply.github.com>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: Simon Doba <simon.doba@hotmail.de>
Co-authored-by: Simon Doba <simon.doba@orbit.de>
Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com>
Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com>
Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com>
Co-authored-by: Elaine Lyons <elaine@lyons.app>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Max Anderson <max.a.anderson95@gmail.com>
Co-authored-by: Aditya Vardhan Sharma <adityaradhika13@gmail.com>
Co-authored-by: Mike Olson <mwolson@member.fsf.org>
Co-authored-by: T3 Code Test <t3code-test@example.com>
Co-authored-by: atryan <atryan@users.noreply.github.com>
sollaholla pushed a commit to sollaholla/t3code that referenced this pull request Aug 1, 2026
awtprod added a commit to awtprod/t3-code that referenced this pull request Aug 2, 2026
* fix: delegate OpenCode session titles to provider (pingdotgg#3720)

* Archive selected threads from the context menu (pingdotgg#3895)

* fix(cli): support force removing projects (pingdotgg#3922)

* fix: allow sidebar to be shrunk when wider than viewport (pingdotgg#2456)

Co-authored-by: Shoaib Ansari <shoaibansari@Shoaibs-Mac-mini.local>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(codex): show web search query and url in tool call details (pingdotgg#2093)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Add Codex launch arguments setting (pingdotgg#2892)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: root <root@localhost.localdomain>

* [orchestration] Clear stale active turn when session becomes inactive (pingdotgg#3159)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Regenerate Codex reset credit protocol bindings (pingdotgg#4173)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(preview): preserve direct localhost navigation (pingdotgg#3939)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* Synchronize mobile threads with authoritative shell snapshots (pingdotgg#4163)

Co-authored-by: codex <codex@users.noreply.github.com>

* Gate iOS glass layout on native support (pingdotgg#4032)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(opencode): resume the OpenCode session on follow-ups instead of starting an empty one (pingdotgg#3617)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(server): use CLI for OpenCode health check instead of spawning server (pingdotgg#4153)

* fix(web): scope timeline minimap hover target to the side gutter (pingdotgg#3869)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* [codex] show complete approval details (pingdotgg#4111)

* fix(web): paint text selection over composer chips (pingdotgg#4139)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

* [codex] preserve custom model slugs (pingdotgg#4168)

* fix(web): preview workspace images in the file panel (pingdotgg#3996)

Co-authored-by: Rhiz3K <rhiz3k@protonmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(web): drag files from the explorer into the chat composer (pingdotgg#4140)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

* fix(desktop): preserve main window bounds (pingdotgg#3851)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* perf(orchestration): speed up new-chat propagation and offline catch-up (pingdotgg#4177)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Finale: upgrade changed files card to fix various UI issues (pingdotgg#4113)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Pass CLI OAuth config to hosted web deploy (pingdotgg#4186)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): always show environment chip for remote projects (pingdotgg#4217)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep composer editable while disconnected (pingdotgg#4241)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: better defaults — Claude 1M context, Codex gpt-5.6, worktrees from origin main (pingdotgg#4240)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(claude): handle all SDK stream messages; stop spurious work-log warning rows (pingdotgg#4244)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Sidebar v2 beta: flat thread list with a server-backed settled lifecycle (pingdotgg#4026)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>

* fix(settings): validate the add-provider wizard step before advancing (pingdotgg#2813) (pingdotgg#3100)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(claude): isolate capability probe from user MCP servers (pingdotgg#4015)

Co-authored-by: codex <codex@users.noreply.github.com>

* Preserve connecting status while a turn starts (pingdotgg#4101)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(server): stop restoring stale OpenCode models (pingdotgg#4095)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] keep scoped package references as text (pingdotgg#4167)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): default provider selection for users without Codex (pingdotgg#4117)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* Unify temporary worktree branch naming (pingdotgg#4278)

* fix(web): use message-square icon for settled icon-less project threads in sidebar v2 (pingdotgg#4279)

* Stabilize sidebar settling animations (pingdotgg#4280)

* Restore Copy Link in chat link context menu (pingdotgg#4161)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(desktop): handle EPIPE errors on stdout/stderr to prevent crash dialog (pingdotgg#4213)

* Preserve draft thread highlighting during promotion (pingdotgg#4283)

Co-authored-by: codex <codex@users.noreply.github.com>

* Move mobile working timer into the thread timeline (pingdotgg#4285)

* Stabilize PR status lookups and provider session lifecycle (pingdotgg#4281)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: open command palette instead of custom dialog for new thread picker in SidebarV2 (pingdotgg#4269)

* fix(server): don't drop sticky PR fallback when remote URL can't be resolved (pingdotgg#4289)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): copy branch name via right-click in the branch selector (pingdotgg#4275)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add remote server updates and standalone service management (pingdotgg#4286)

Co-authored-by: codex <codex@users.noreply.github.com>

* Refine light-mode sidebar surfaces (pingdotgg#4268)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): don't mark Android VPN/Tailscale as offline when connected (pingdotgg#3949)

* improve and prevent silent thread branch drift and PR fetching (pingdotgg#2284)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* feat(web): refresh application surfaces

* style(web): polish dark mode dialogs

* fix(web): unify and tune glass surfaces

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): apply glass opacity to thread tooltip

* fix(web): override thread tooltip background

* fix(web): apply glass opacity to model picker

* style(web): polish glass opacity slider

* fix(web): apply glass opacity to command palette

* fix(web): add glass composer alerts

* fix(web): honor composer glass opacity

* test(web): stabilize timeline module setup

* style(web): fade settings content beneath navbar

* test(desktop): include glass opacity in settings fixture

* fix(web): address redesign review findings

* fix(web): sync provider banner dismissal

* fix(web): new-thread defaults ignored for remote environments (pingdotgg#4276)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: add "Auto" runtime mode — AI-reviewed approvals for Codex and Claude (pingdotgg#4272)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add shared t3.json project configuration support (pingdotgg#4317)

* Restore light-mode surfaces and refine dialog styling

- Restore light-mode glass, dialog, dropdown, and composer colors
- Refine provider wizard, changed-file cards, sidebar controls, and buttons
- Update wizard step tests for the new list structure

* Unify dialog glass and fix composer overlays (pingdotgg#4365)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): warn before silent Windows updates (pingdotgg#4350)

* [codex] Move project grouping to General settings (pingdotgg#4313)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Group project scopes in mobile thread lists (pingdotgg#4314)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Move mobile project grouping to General settings (pingdotgg#4315)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Deduplicate connection failure messaging (pingdotgg#4367)

Co-authored-by: codex <codex@users.noreply.github.com>

* Restore grouped project filtering in Sidebar V2 (pingdotgg#4282)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] restore Sidebar V2 project actions (pingdotgg#4373)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Group projects in new-thread pickers (pingdotgg#4312)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(web): restore dark composer toolbar styling

* Fix thread tooltip folder icon color (pingdotgg#4383)

* fix(server): parse CLI version in update preflight (pingdotgg#4389)

* fix(web): sidebar v2 polish — jump hints, working duration, in-flight fade, settled sort (pingdotgg#4274)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix logical project grouping labels on mobile (pingdotgg#4391)

Co-authored-by: codex <codex@users.noreply.github.com>

* Add preview color scheme controls and simplify project grouping (pingdotgg#4385)

Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(cli): publish nightly branded favicons (pingdotgg#4372)

* Fix thread loading flash (pingdotgg#4396)

* fix(client-runtime): keep a warm thread un-settled despite a merged/closed PR (pingdotgg#4309)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix composer context strip alignment and glass shell (pingdotgg#4404)

* Polish iOS git progress overlay with glass effects (pingdotgg#4387)

* Improve composer glass fallbacks (pingdotgg#4406)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(web): collapse large git diffs by default to make chat more readable (pingdotgg#4409)

* Stop new threads inheriting checkout/branch from viewed thread (pingdotgg#4411)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: tone down branch-mismatch banner (pingdotgg#4416)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: Claude Code skills discoverable for the composer $ picker (pingdotgg#4414)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep settled threads reachable when opened directly (pingdotgg#4413)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(sidebar-v2): thread snoozing (pingdotgg#4311)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: maria <maria@kuuro.net>

* Upgrade Clerk packages and Expo integration (pingdotgg#4440)

* Increase light-mode contrast for user message bubbles (pingdotgg#4441)

* Restore model picker layout and retain iterative test state (pingdotgg#4450)

Co-authored-by: codex <codex@users.noreply.github.com>

* Color settled PR labels on hover (pingdotgg#4451)

Co-authored-by: codex <codex@users.noreply.github.com>

* [codex] Fix glass hover compositing artifacts (pingdotgg#4446)

Co-authored-by: codex <codex@users.noreply.github.com>

* Add Claude Opus 5 model (pingdotgg#4472)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>

* feat(web): add collapse-all toggle to diff panel (pingdotgg#4475)

* feat(web): show fast mode as a bolt instead of a "Normal" label (pingdotgg#4488)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(dev): keep worktree dev state isolated on T3 Code dev servers (pingdotgg#4555)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(dev): Make t3 code dev instances shareable over Tailscale (pingdotgg#4556)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(dev): skip browser-blocked ports (pingdotgg#4608)

* fix: cut websocket throughput in half by pruning activity payloads (pingdotgg#4622)

* perf(mobile): defer work-log detail serialization (pingdotgg#4607)

* test: account for lazy thread feed details (pingdotgg#4628)

* feat(relay): limit managed tunnels per user (pingdotgg#4530)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add managed tunnel limits migration (pingdotgg#4635)

* Add background preview capture and picture-in-picture support (pingdotgg#4397)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(web): prompt stash — cmd+S saves the composer to a per-provider queue (pingdotgg#4453)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Upgrade Effect and Alchemy betas (pingdotgg#4643)

Prepare Relay production infrastructure for the PlanetScale PS_20 HA topology, upgrade Effect and Alchemy to compatible betas, reconcile migration state, and preserve patched MCP session termination behavior.\n\nCo-authored-by: codex <codex@users.noreply.github.com>

* feat: allow new thread creation through project breadcrumbs (pingdotgg#4638)

* fix(web): scope PR state to the thread branch (pingdotgg#4460)

Co-authored-by: codex <codex@users.noreply.github.com>

* Drop redundant Relay user indexes (pingdotgg#4648)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(connect): release the Cloudflare tunnel when the environment shuts down (pingdotgg#4531)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix Relay Worker RuntimeContext wiring (pingdotgg#4653)

Co-authored-by: codex <codex@users.noreply.github.com>

* Fix live sidebar resize limits and defer Alchemy runtime context (pingdotgg#4655)

* fix(web): constrain branch toolbar context (pingdotgg#4657)

* Keep MCP credentials alive across provider turns (pingdotgg#4659)

* fix: close actions dropdown when editing (pingdotgg#4660)

* fix(preview): stabilize PiP viewport identity (pingdotgg#4661)

Co-authored-by: codex <codex@users.noreply.github.com>

* Add glass styling for thread tooltips and simplify preview tab handling (pingdotgg#4665)

* Use tarball archiving for hosted web deploys (pingdotgg#4669)

* fix(server): bound editor discovery during config loading (pingdotgg#4291)

* Prevent draft thread detail polling before shell registration (pingdotgg#4670)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat: add configurable source control writing settings (pingdotgg#4204)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>

* feat(diff-panel): show total line additions and deletions (pingdotgg#4674)

* Clear provider update actions while updating (pingdotgg#4676)

* Fix sidebar highlighting for draft threads (pingdotgg#4679)

* Use glass surfaces for web toasts (pingdotgg#4681)

* Show origin ref in branch trigger label (pingdotgg#4680)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): match react version to react-native 0.85.3 vendored renderer (19.2.3) (pingdotgg#4675)

* chore(release): prepare v0.0.29

* Add OTA update checks to mobile settings (pingdotgg#4686)

* fix(mobile): threads load snapped to bottom on iOS (pingdotgg#4689)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: default sidebar v2 on for nightly and dev builds (pingdotgg#4491)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): 33 web UI fixes (pingdotgg#4700)

* Make mobile Thread List v2 the default (pingdotgg#4717)

* Fix mobile showcase workflow without Clerk (pingdotgg#4718)

* Fix relay credential lookup for unlinked environments (pingdotgg#4692)

Co-authored-by: codex <codex@users.noreply.github.com>

* Settle merged PR threads immediately (pingdotgg#4704)

* feat(web): add maria's sidebar header artwork toggle (pingdotgg#4652)

* feat(web): add appearance settings category (pingdotgg#4715)

* fix(desktop): allow updater-controlled relaunch (pingdotgg#4721)

* fix(web): prevent diff panel scroll jumping (pingdotgg#4724)

* Link inline code file paths in chat markdown (pingdotgg#4726)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix Android showcase capture and rebuild v2 queued rows (pingdotgg#4730)

Co-authored-by: Claude <noreply@anthropic.com>

* perf(server): negotiate permessage-deflate on the websocket (pingdotgg#4705)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* docs: overhaul agent guidance (pingdotgg#4782)

* Prevent sidebar row labels from truncating (pingdotgg#4789)

* perf(server): gzip large thread snapshots (pingdotgg#4788)

* fix(web): stashed prompts now survive switching providers (pingdotgg#4787)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix Git ref refresh resource storms (pingdotgg#4727)

Co-authored-by: codex <codex@users.noreply.github.com>

* perf(server): trim stale context-window rows and drop dead replay RPC (pingdotgg#4791)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): defer command palette filesystem navigation (pingdotgg#2109)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(release): skip scripts during Vercel installs (pingdotgg#4796)

* refactor(client): share filesystem browse navigation (pingdotgg#4797)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): defer filesystem navigation (pingdotgg#4799)

Co-authored-by: codex <codex@users.noreply.github.com>

* refactor(server): use native HTTP compression streams (pingdotgg#4798)

Co-authored-by: codex <codex@users.noreply.github.com>

* Remove Connect waitlist and add GA announcement tooling (pingdotgg#4691)

* Fix Connect sign-in settings label (pingdotgg#4806)

* chore(release): prepare v0.0.30

* fix(desktop): restore T3 Connect sign-in (pingdotgg#4809)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Simplify files panel header (pingdotgg#4828)

* build(desktop): reduce installed app size by ~300MB (pingdotgg#4824)

* Update model version from claude-opus-4-8 to claude-opus-5 (pingdotgg#4832)

* Preserve the thread shell while detail loads (pingdotgg#4830)

* Reduce idle work and disk churn with native resource diagnostics (pingdotgg#2679)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(server): detect repositories after initialization (pingdotgg#4848)

* perf(server): merge separate staged/unstaged numstat calls into single diff HEAD --numstat (pingdotgg#4843)

* fix(git): disable external diff for review diff previews (pingdotgg#4854)

* Fix editable file focus and live syntax highlighting (pingdotgg#3979)

* fix(web): remember the rendered-markdown choice across threads (pingdotgg#4853)

Co-authored-by: Simon Doba <simon.doba@orbit.de>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* chore(release): prepare v0.0.31

* fix(mobile): reduce thread feed scroll jank (pingdotgg#4874)

* fix(web): restore sidebar v2 thread actions and terminal icon (pingdotgg#4712)

* fix(web): settle button now works on hover, not just right-click (pingdotgg#4905)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(clients): disable add project while disconnected (pingdotgg#4834)

* fix(composer): hide default Codex service tier (pingdotgg#4784)

* docs: link iOS and Android app store downloads (pingdotgg#4902)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): align remote server update action (pingdotgg#4731)

* fix(connect): suggest a serve command that matches how you ran connect (pingdotgg#4897)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): stop shared content errors in Personal Team builds (pingdotgg#4943)

* perf(mobile): sends respond instantly, thread opens stop freezing (pingdotgg#4882)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): show Codex fast mode as a bolt (pingdotgg#4947)

* docs: seed worktrees with a copy of real userdata instead of banning it (pingdotgg#4949)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): support dragged images in the composer (pingdotgg#4953)

* fix(mobile): stop long iOS threads from jumping while scrolling up (pingdotgg#4867)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep worktree default when switching a draft's machine (pingdotgg#4964)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(mobile): reconnect environments immediately on resume (pingdotgg#4878)

* feat(web): pasting a huge screenshot now compresses it instead of erroring (pingdotgg#4967)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): regenerate thread titles from sidebar (pingdotgg#4810)

* fix(web): show server update progress through reconnect (pingdotgg#4903)

* feat(search): find threads by conversation content (pingdotgg#4959)

* fix: marketing site Vercel builds no longer die after ~100 deploys (pingdotgg#4975)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* docs: split user and maintainer docs, fix 100+ stale claims (pingdotgg#4807)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): server updates no longer look like warnings (pingdotgg#4992)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(connect): reboots no longer strand the relay link, 403s now say why (pingdotgg#4988)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add project file picker (⌘P) and project content search (⇧⌘F) (pingdotgg#4855)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Check for mobile app updates on launch (pingdotgg#4958)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (pingdotgg#4984)

* fix(server): restore PR detection without HOME (pingdotgg#4985)

* fix(web): fill fast mode icon (pingdotgg#5004)

* fix: cache project favicons across web and mobile (pingdotgg#4767)

* perf(ci): cut stale runs and redundant setup (pingdotgg#4802)

* chore(mobile): bump app version to 1.0.1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* style(web): make scroll-to-end pill translucent (pingdotgg#5036)

* fix(ci): drop sparse-checkout from EAS workflows

actions/checkout implements sparse-checkout with --filter=blob:none, so
the runner repo is a partial clone missing the .repos/ blobs. eas-cli
archives the project via `git clone --depth 1 file://<workspace>`,
which upload-pack cannot serve from a partial clone and exits 128
(pingdotgg#4802 broke both EAS build workflows this way).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux (pingdotgg#5015)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(server): cache default branch name and origin existence across status refreshes (pingdotgg#5008)

* feat(shared): support shorthand (major-only) versions in the semver helpers (pingdotgg#5027)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): remove unnecessary photo library permission (pingdotgg#4929)

* fix(shared): lenient JSON parser deletes commas inside string values (pingdotgg#5025)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): default bare IP pairing to HTTP (pingdotgg#4990)

* fix(mobile): restore iOS Threads branding (pingdotgg#4862)

* chore: add mobile issue template area (pingdotgg#4895)

* fix(desktop): link release notes from the update downloaded toast (pingdotgg#4771)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(mobile): accept Android clipboard images in composer (pingdotgg#4836)

* fix(mobile): show the correct build channel in Android's Threads page header (pingdotgg#4861)

* fix(contracts): decode growing config unions forward-compatibly (pingdotgg#5055)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): server model, worktree, and origin preferences now apply to new tasks (pingdotgg#5064)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ci): repair the mobile showcase screenshots workflow (pingdotgg#5057)

* fix(ci): capture iPad App Store screenshots in landscape (pingdotgg#5065)

* fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout (pingdotgg#5066)

* feat(cli): `npx t3 pair` - generate QR code from a running server (pingdotgg#4955)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): self-update no longer rolls itself back on restart (pingdotgg#5095)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ci): rotate iPad showcase captures without Simulator UI scripting (pingdotgg#5094)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): render terminals with libghostty-vt (pingdotgg#4860)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* refactor: move the canonical libghostty-vt vendor to the repository root (pingdotgg#5102)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(mobile): add thread snoozing (pingdotgg#5053)

* feat(mobile): make settled threads collapsible (pingdotgg#5056)

* follow-up normalization after pingdotgg#4700. (pingdotgg#4498)

Co-authored-by: T3 Code Test <t3code-test@example.com>

* feat(web): search threads from the sidebar (pingdotgg#4769)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(release): prepare Command Center desktop v1

* fix(ci): allow public release publisher identity

* fix(web): avoid Windows preview path collision

* test(release): reject Windows module path collisions

* fix(release): bundle command center core

* fix: audit preserved upstream history safely

* feat(providers): add Kimi, subagents, and usage analytics

* fix(ci): repair reconnects and PNG safety scanning

* test(desktop): update Clerk environment fixture

* fix(ci): align provider and server integration contracts

* perf(web): skip impossible image encodings

* fix command center chats on native desktop hosts

---------

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Tristan Knight <tris203@gmail.com>
Co-authored-by: Christoph Herzog <a.github@omega-id.com>
Co-authored-by: Andrew Barnes <bortstheboat@gmail.com>
Co-authored-by: Shoaib <shoaib050326@gmail.com>
Co-authored-by: Shoaib Ansari <shoaibansari@Shoaibs-Mac-mini.local>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com>
Co-authored-by: James <105842516+jamesx0416@users.noreply.github.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: root <root@localhost.localdomain>
Co-authored-by: Andrew Forster <76947376+Andrew-Forster@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Chris Michael Guzman <67719167+Chrrxs@users.noreply.github.com>
Co-authored-by: Vadym Kotai <vdmkotai@gmail.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: xxashxx-svg <xxanshxx9@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Maxwell Young <maxtheyoung@gmail.com>
Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Rhiz3K <33246262+Rhiz3K@users.noreply.github.com>
Co-authored-by: Rhiz3K <rhiz3k@protonmail.com>
Co-authored-by: Anirudh Coontoor <me@anirudhs.net>
Co-authored-by: Rusiru Sadathana <rusirusadathana@gmail.com>
Co-authored-by: ss <69873514+sandersonstabo@users.noreply.github.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Leonel Rivas <encriptandost@gmail.com>
Co-authored-by: Jaret Bottoms <jaretbottoms@gmail.com>
Co-authored-by: Ishan <ishansachu1@gmail.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: Miklós Fazekas <mfazekas@szemafor.com>
Co-authored-by: Henry Zhang <113233555+caezium@users.noreply.github.com>
Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com>
Co-authored-by: legs <145564979+justsomelegs@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: tomlit <tomlit@gmail.com>
Co-authored-by: jan <hi@4bs3nt.com>
Co-authored-by: Alex Southwell <saphid@gmail.com>
Co-authored-by: Max Katz <me@maxkatz.me>
Co-authored-by: Krzysztof Moch <krzysmoch.programs@gmail.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: wukko <me@wukko.me>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: ohbentos <72638975+ohbentos@users.noreply.github.com>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: Simon Doba <simon.doba@hotmail.de>
Co-authored-by: Simon Doba <simon.doba@orbit.de>
Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com>
Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com>
Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com>
Co-authored-by: Elaine Lyons <elaine@lyons.app>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Max Anderson <max.a.anderson95@gmail.com>
Co-authored-by: Aditya Vardhan Sharma <adityaradhika13@gmail.com>
Co-authored-by: Mike Olson <mwolson@member.fsf.org>
Co-authored-by: T3 Code Test <t3code-test@example.com>
Co-authored-by: atryan <atryan@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant